package exception;
/**
 * A:案例演示
 *  try...catch的方式处理多个异常
 *  格式:
 *     try{
 *         可能产生异常的代码
 *     }catch(定义一个异常的变量,用来接收try中抛出的异常对象){
 *     ...
 *     }
 *     catch(异常类名 变量名){
 *     ...
 *     }finally{
 *     }
 *   注意:
 *    1.try中可能会抛出多个异常对象,那么就可以使用多个catch来处理这些异常对象
 *    2.finally不能单独使用,必须和try一起使用
 *    3.finally一般用于资源释放(资源回收),无论程序是否出现异常,最后都要资源释放(IO)
 *
 *  JDK7以后处理多个异常的方式及注意事项
 */
public class Demo03TryCatchFinally {
    public static void main(String[] args) {

        demo1();

        int a = 10;
        int b = 0;
        int[] arr = {11,22,33,44,55};

        //JDK7如何处理多个异常
        try {
            System.out.println(a / b);
            System.out.println(arr[10]);
        } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
            System.out.println("出错了");
        }
    }

    public static void demo1() {
        int a = 10;
        int b = 0;
        int[] arr = {11,22,33,44,55};

        try {
            System.out.println(a / b);
            System.out.println(arr[10]);
            arr = null;
            System.out.println(arr[0]);
        } catch (ArithmeticException e) {
            System.out.println("除数不能为零");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("索引越界了");
        } catch (Exception e) {
            System.exit(0);
            System.out.println("出错了");
        }finally {
            //无论是否出现异常,都会执行
            System.out.println("资源释放");
        }

        System.out.println("over");
    }
}
